home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / tools / pcd2_126 / pcd2_126.lzh / PCDDEC.HAS < prev    next >
Text File  |  1997-01-02  |  5KB  |  270 lines

  1.     .include    doscall.mac
  2.     .cpu    68000
  3.     .xdef    YCC2XHI_S,YCC2XHI_X,YCC2XHI_S2
  4.     .xdef    Make_Table
  5.     .xdef    PCD_WORK,PCD_WORK_Y,PCD_WORK_RGB
  6.     .xdef    X1391,X1865,X441,X949,X2271
  7.  
  8. * in d0.w=File Handle
  9. * in a0.l=Graph work ptr
  10. * in a1.l=dec work ptr
  11. * in a2.l=Graph work ptr 2
  12.     .offset    0
  13. READ_BYTE    .ds.w    1    * XSIZE*3    読み込みバイト数
  14. OSET_Y1        .ds.w    1    * XSIZE*4    2ライン目のYデータオフセット
  15. XlpCOUNT    .ds.w    1    * XSIZE/2-1 or XSIZE/6-1 Xループカウンタ値
  16. YlpCOUNT    .ds.w    1    * YSIZE/2-1    Yループカウンタ値
  17. CCDEC_COUNT    .ds.w    1    * XSIZE/2-1
  18. YDAT_COUNT    .ds.w    1    * XSIZE*2-1    Yデータ展開カウンタ値
  19. LINE_OSET1    .ds.w    1    * 1ラインのバイト数
  20. LINE_OSET2    .ds.w    1    * 2ラインのバイト数
  21. TO32    macro    dreg
  22.     lsl.l    #3,dreg
  23.     swap    dreg
  24.     tst.w    dreg
  25.     bpl    @f
  26.     moveq.l    #0,dreg
  27. @@:    cmp.w    #$1f,dreg
  28.     ble    @f
  29.     move.w    #$1f,dreg
  30. @@:
  31.     .endm
  32. CCLOAD    macro
  33.     move.l    (a2)+,d3
  34.     move.l    (a2)+,d4
  35.     move.l    (a2)+,d5
  36.     endm
  37. YDEC    macro    regA,regB
  38.     move.l    (regA)+,d0
  39.     move.l    d0,d1
  40.     move.l    d0,d2
  41.     add.l    d3,d0
  42.     add.l    d4,d1
  43.     add.l    d5,d2
  44.     TO32    d0
  45.     TO32    d1
  46.     TO32    d2
  47.     lsl.w    #5,d1
  48.     add.w    d0,d1
  49.     lsl.w    #5,d1
  50.     add.w    d2,d1
  51.     add.w    d1,d1
  52.     move.w    d1,(regB)+
  53.     endm
  54. Y0DEC    macro
  55.     YDEC    a0,a4
  56.     endm
  57. Y1DEC    macro
  58.     YDEC    a1,a5
  59.     endm
  60. DEC_PRE    macro
  61.     movem.l    d1-d7/a0-a6,-(sp)
  62.     move.l    a1,(DEC_WORK)
  63.     move.l    a1,a3
  64.     move.w    (READ_BYTE,a3),-(sp)
  65.     clr.w    -(sp)
  66.     pea    PCD_WORK
  67.     move.w    d0,-(sp)        * DOS _READのスタック設定完了
  68.     move.w    (YlpCOUNT,a3),d7        * Y方向ループカウンタ
  69.     move.l    a0,a6
  70. 2:    DOS    _READ
  71.     cmp.w    (READ_BYTE,a3),d0        * DOS _READにミスしたか?
  72.     bne    READ_ERR_BREAK
  73.     swap    d7
  74.     move.w    (YDAT_COUNT,a3),d7        * 2ライン分
  75.     lea.l    (PCD_WORK),a0
  76.     lea.l    (PCD_WORK_Y),a1
  77.     lea.l    (X1391),a2
  78. @@:    moveq.l    #0,d0
  79.     move.b    (a0)+,d0
  80.     add.w    d0,d0
  81.     add.w    d0,d0
  82.     move.l    (a2,d0.w),(a1)+
  83.     dbra    d7,@b
  84.     move.l    a6,-(sp)
  85.     lea.l    (a0),a1            * (a0)=Cb
  86.     move.w    (CCDEC_COUNT,a3),d7    * CCデコードカウンタ値
  87.     add.w    d7,a1
  88.     addq.w    #1,a1            * (a1)=Cr
  89.     lea.l    (X1865),a2
  90.     lea.l    (X441),a3
  91.     lea.l    (X949),a4
  92.     lea.l    (X2271),a5
  93.     lea.l    (PCD_WORK_RGB),a6
  94. @@:    moveq.l    #0,d0
  95.     move.b    (a1)+,d0
  96.     add.w    d0,d0
  97.     add.w    d0,d0
  98.     move.l    (a2,d0.w),(a6)+
  99.     move.l    (a4,d0.w),d1
  100.     moveq.l    #0,d0
  101.     move.b    (a0)+,d0
  102.     add.w    d0,d0
  103.     add.w    d0,d0
  104.     add.l    (a3,d0.w),d1
  105.     move.l    d1,(a6)+
  106.     move.l    (a5,d0.w),(a6)+
  107.     dbra    d7,@b
  108.     move.l    (DEC_WORK),a3
  109.     move.l    (sp)+,a6
  110.     lea.l    (PCD_WORK_Y),a0
  111.     move.w    (OSET_Y1,a3),a1
  112.     adda.l    a0,a1
  113.     lea.l    (PCD_WORK_RGB),a2
  114.     lea.l    (a6),a4
  115.     move.w    (LINE_OSET1,a3),a5
  116.     adda.l    a6,a5
  117.     endm
  118. *------------------------------
  119. * フォトYCC→Xハイカラー変換
  120. * フルサイズ展開
  121. *------------------------------
  122.     .text
  123.     .align    4
  124. YCC2XHI_S:
  125.     DEC_PRE
  126.     move.w    (XlpCOUNT,a3),d7
  127. 1:    CCLOAD
  128.     Y0DEC
  129.     Y0DEC
  130.     Y1DEC
  131.     Y1DEC
  132.     dbra    d7,1b
  133.     add.w    (LINE_OSET2,a3),a6
  134.     swap    d7
  135.     dbra    d7,2b
  136.     lea.l    (10,sp),sp
  137.     moveq.l    #0,d0
  138.     movem.l    (sp)+,d1-d7/a0-a6
  139.     rts
  140. *------------------------------
  141. * フォトYCC→Xハイカラー変換
  142. * X*2/3,Yサイズに展開する
  143. *------------------------------
  144.     .align    4
  145. YCC2XHI_X:
  146.     DEC_PRE
  147.     move.w    (XlpCOUNT,a3),d7
  148. 1:    CCLOAD
  149.     Y0DEC
  150.     Y0DEC
  151.     Y1DEC
  152.     Y1DEC
  153.     addq.l    #4,a0
  154.     addq.l    #4,a1
  155.     CCLOAD
  156.     Y0DEC
  157.     Y1DEC
  158.     CCLOAD
  159.     Y0DEC
  160.     Y1DEC
  161.     addq.l    #4,a0
  162.     addq.l    #4,a1
  163.     dbra    d7,1b
  164.     add.w    (LINE_OSET2,a3),a6
  165.     swap    d7
  166.     dbra    d7,2b
  167.     lea.l    (10,sp),sp
  168.     moveq.l    #0,d0
  169.     movem.l    (sp)+,d1-d7/a0-a6
  170.     rts
  171. *------------------------------
  172. * フォトYCC→Xハイカラー変換
  173. * フルサイズ展開(512+256,512)
  174. *------------------------------
  175.     .text
  176.     .align    4
  177. YCC2XHI_S2:
  178.     move.l    a2,(GraphWork)
  179.     DEC_PRE
  180.     move.w    #255,d7
  181. 1:    CCLOAD
  182.     Y0DEC
  183.     Y0DEC
  184.     Y1DEC
  185.     Y1DEC
  186.     dbra    d7,1b
  187.     move.l    a6,-(sp)
  188.     move.l    GraphWork,a6
  189.     move.l    (a6)+,a4
  190.     move.l    (a6)+,a5
  191.     move.l    a6,GraphWork
  192.     move.l    (sp)+,a6
  193.     move.w    #127,d7
  194. 1:    CCLOAD
  195.     Y0DEC
  196.     Y0DEC
  197.     Y1DEC
  198.     Y1DEC
  199.     dbra    d7,1b
  200.  
  201.     add.w    (LINE_OSET2,a3),a6
  202.     swap    d7
  203.     dbra    d7,2b
  204.     lea.l    (10,sp),sp
  205.     moveq.l    #0,d0
  206.     movem.l    (sp)+,d1-d7/a0-a6
  207.     rts
  208. *------------------------------
  209. * 読み込みエラー
  210. *------------------------------
  211. READ_ERR_BREAK:
  212.     lea.l    (10,sp),sp
  213.     moveq.l    #-1,d0
  214.     movem.l    (sp)+,d1-d7/a0-a6
  215.     rts
  216. *------------------------------
  217. *乗算テーブルを作成します。
  218. *------------------------------
  219. Make_Table:
  220.     movem.l    d0-d7/a0-a6,-(sp)
  221.     lea.l    (X1391),a0
  222.     move.l    #1391,d1
  223.     mulu.w    d0,d1
  224.     divu.w    #100,d1
  225.     ext.l    d1
  226.     moveq.l    #0,d0
  227.     bsr    MULMAIN
  228.  
  229.     lea.l    (X1865),a0
  230.     move.l    #1865,d1
  231.     move.l    #-255023,d0
  232.     bsr    MULMAIN
  233.  
  234.     lea.l    (X441),a0
  235.     move.l    #-441,d1
  236.     moveq.l    #0,d0
  237.     bsr    MULMAIN
  238.  
  239.     lea.l    (X949),a0
  240.     move.l    #-949,d1
  241.     move.l    #199313,d0
  242.     bsr    MULMAIN
  243.  
  244.     lea.l    (X2271),a0
  245.     move.l    #2271,d1
  246.     move.l    #-353784,d0
  247.     bsr    MULMAIN
  248.     movem.l    (sp)+,d0-d7/a0-a6
  249.     rts
  250.  
  251. MULMAIN:
  252.     move.w    #255,d7
  253. @@:    move.l    d0,(a0)+
  254.     add.l    d1,d0
  255.     dbra    d7,@b
  256.     rts
  257.     .bss
  258.     .align    4        * テーブルの実際の内容
  259. X1391:    .ds.l    256        * n*1391
  260. X1865:    .ds.l    256        * n*1865-255023
  261. X441:    .ds.l    256        * n*-441
  262. X949:    .ds.l    256        * n*-949+199313
  263. X2271:    .ds.l    256        * n*2271-353784
  264.  
  265. GraphWork:    .ds.l    1
  266. DEC_WORK:    .ds.l    1
  267. PCD_WORK_Y:    .ds.l    768*2
  268. PCD_WORK_RGB:    .ds.l    768*3/2
  269. PCD_WORK:    .ds.b    768*3
  270.